package voxToolkit;

import grafico.Fabrica;

import java.awt.AWTEvent;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;

import javax.swing.JComboBox;

import audio.AudioSintetizado;
import audio.SoundEvent;
import audio.SoundListener;

public class VoxCombo extends JComboBox implements SoundListener, FocusListener, ActionListener{

	
	private String nome;
	private String rotulo;
	private AudioSintetizado sintetizador;
	

	/**
	 * Constrói um objeto com um conjunto de itens, um nome
	 * e um rótulo para ser lido pelo sintetizador.
	 * @param itens
	 * @param nome
	 * @param rotulo
	 */
	public VoxCombo (Object[] itens, String nome, String rotulo){		
		super(itens);
		this.nome = nome;
		this.rotulo = rotulo;
		setFont(Fabrica.fonteMedia);
		ativaSintetizador();
		addActionListener(this);
		addFocusListener(this);
		/*addActionListener(VoxEventos.instancia());
		addFocusListener(VoxEventos.instancia());*/
	}
	
	/**
	 * Constrói um objeto com um conjunto de itens, um nome
	 * e um rótulo para ser lido pelo sintetizador e largura
	 * e altura pré-definidos.
	 * @param itens
	 * @param nome
	 * @param rotulo
	 * @param largura
	 * @param altura
	 */
	public VoxCombo (Object[] itens, 
			         String nome, 
			         String rotulo, 
			         int largura, 
			         int altura){
		
		super(itens);
		this.nome = nome;
		this.rotulo = rotulo;
		this.setFont(Fabrica.fonteMedia);
		this.setSize(new Dimension(largura, altura));
		ativaSintetizador();
		addActionListener(this);
		addFocusListener(this);
		/*addActionListener(VoxEventos.instancia());
		addFocusListener(VoxEventos.instancia());*/
	}

	private void ativaSintetizador() {
		sintetizador = AudioSintetizado.instancia();
		sintetizador.addSoundListener(this);
	}

	public String getNome() {
		return nome;
	}


	public void setNome(String nome) {
		this.nome = nome;
	}


	public String getRotulo() {
		return rotulo;
	}


	public void setRotulo(String rotulo) {
		this.rotulo = rotulo;
	}

	@Override
	public void FimDeFala(SoundEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void eventDispatched(AWTEvent e) {
		if (e instanceof SoundEvent)
			FimDeFala((SoundEvent) e);
		
	}

	@Override
	public void focusGained(FocusEvent e) {
		VoxCombo voxCombo = (VoxCombo) e.getSource();
		sintetizador.escreve(voxCombo.getRotulo() + ". "
				+ voxCombo.getSelectedItem().toString());
		
	}

	@Override
	public void focusLost(FocusEvent e) {
		sintetizador.abortaFala();
		
	}
	
	@Override
	public void actionPerformed ( ActionEvent e )
	{
		VoxCombo voxCombo = (VoxCombo) e.getSource();
		sintetizador.escreve((String) voxCombo.getSelectedItem());
	}
	
	
}


